// 开启严格模式
'use strict';

// 公司简介
var BRIEFINTRODUCTION = {};
// 发展经历
var DEVELOPMENT = {};
// 服务网络
var SERVICE = {};
// 获奖资质
var WINNING = {};
// 工作机会
var WORK = {};
// 联系我们
var CONTACT = {};
// 上传资源路径
var UPLOADS = '';
// 上传地址
var UPLOADURL = '';
// 提示类名
var PROMPT = '.modal_frame-form-prompt';
var SHOW = 'down';
// 成功类名
var SUCCESS = 'success';
// 错误类名
var ERROR = 'error';
// 请求地址
var URL = '';

/**
 * 初始化
 * @return void
 */
(function init() {
    // 创建富文本编辑器
    ueditor();
    // 变化校验
    changeRules('check');
})()

/**
 * 创建富文本编辑器
 * @return void
 */
function ueditor() {
    // 公司简介
    BRIEFINTRODUCTION = UE.getEditor('brief_introduction', {
        autoHeightEnabled: false,
        initialFrameWidth: '100%',
        initialFrameHeight: '300'
    });
    // 发展经历
    DEVELOPMENT = UE.getEditor('development', {
        autoHeightEnabled: false,
        initialFrameWidth: '100%',
        initialFrameHeight: '300'
    });
    // 服务网络
    SERVICE = UE.getEditor('service', {
        autoHeightEnabled: false,
        initialFrameWidth: '100%',
        initialFrameHeight: '300'
    });
    // 获奖资质
    WINNING = UE.getEditor('winning', {
        autoHeightEnabled: false,
        initialFrameWidth: '100%',
        initialFrameHeight: '300'
    });
    // 工作机会
    WORK = UE.getEditor('work', {
        autoHeightEnabled: false,
        initialFrameWidth: '100%',
        initialFrameHeight: '300'
    });
    // 联系我们
    CONTACT = UE.getEditor('contact', {
        autoHeightEnabled: false,
        initialFrameWidth: '100%',
        initialFrameHeight: '300'
    });
}

/**
 * 设置配置
 * @param {Object} config 配置
 * @return void
 */
function setConfig(config) {
    // 设置上传资源路径
    UPLOADS = config.UPLOADS;
    // 设置上传地址
    UPLOADURL = config.UPLOADURL;
    // 设置请求地址
    URL = config.URL;
}

/**
 * 变化校验
 * @param {String} operation 操作
 * @return void
 */
function changeRules(operation) {
    // 小图标
    var icon = $('#icon');
    // LOGO
    var logo = $('#logo');
    // 标题
    var title = $('#title');
    // 关键词
    var keywords = $('#keywords');
    // 描述
    var description = $('#description');
    // 名称
    var name = $('#name');
    // 地址
    var addr = $('#addr');
    // 版权
    var copyright = $('#copyright');
    // 备案
    var put_on_record = $('#put_on_record');
    // 电话
    var telephone = $('#telephone');
    // 传真
    var fax = $('#fax');
    var telephonePattern =  /^[0-9-()（）]{7,18}$/;
    // 邮编
    var zip_code = $('#zip_code');
    var zip_codePattern = /^[0-9]{6}$/;
    // 通用正则
    var _pattern = /^.+$/;

    switch (operation) {
        // 校验
        case 'check':
            // 上传校验
            icon.change(function () {
                $(this).siblings(PROMPT).removeClass(SHOW);
                $(this).removeClass(ERROR).addClass(SUCCESS);
            })

            // LOGO校验
            logo.change(function () {
                $(this).siblings(PROMPT).removeClass(SHOW);
                $(this).removeClass(ERROR).addClass(SUCCESS);
            })

            // 标题校验
            title.bind('input propertychange blur', function () {
                if ($(this).val() === '') {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                } else if (!_pattern.test($(this).val())) {
                    $(this).siblings(PROMPT).text('标题不能输入换行符').addClass(SHOW);
                    $(this).removeClass(SUCCESS).addClass(ERROR);
                } else {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                }
            })

            // 关键词校验
            keywords.bind('input propertychange blur', function () {
                if ($(this).val() === '') {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                } else if (!_pattern.test($(this).val())) {
                    $(this).siblings(PROMPT).text('关键词不能输入换行符').addClass(SHOW);
                    $(this).removeClass(SUCCESS).addClass(ERROR);
                } else {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                }
            })

            // 描述校验
            description.bind('input propertychange blur', function () {
                if ($(this).val() === '') {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                } else if (!_pattern.test($(this).val())) {
                    $(this).siblings(PROMPT).text('描述不能输入换行符').addClass(SHOW);
                    $(this).removeClass(SUCCESS).addClass(ERROR);
                } else {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                }
            })

            // 名称校验
            name.bind('input propertychange blur', function () {
                if ($(this).val() === '') {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                } else if (!_pattern.test($(this).val())) {
                    $(this).siblings(PROMPT).text('名称不能输入换行符').addClass(SHOW);
                    $(this).removeClass(SUCCESS).addClass(ERROR);
                } else {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                }
            })

            // 电话校验
            telephone.bind('input propertychange blur', function () {
                if ($(this).val() === '') {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                } else if (!telephonePattern.test($(this).val())) {
                    $(this).siblings(PROMPT).text('请输入正确的电话号码格式').addClass(SHOW);
                    $(this).removeClass(SUCCESS).addClass(ERROR);
                } else {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                }
            })

            // 传真校验
            fax.bind('input propertychange blur', function () {
                if ($(this).val() === '') {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                } else if (!telephonePattern.test($(this).val())) {
                    $(this).siblings(PROMPT).text('请输入正确的传真号码格式').addClass(SHOW);
                    $(this).removeClass(SUCCESS).addClass(ERROR);
                } else {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                }
            })

            // 地址校验
            addr.bind('input propertychange blur', function () {
                if ($(this).val() === '') {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                } else if (!_pattern.test($(this).val())) {
                    $(this).siblings(PROMPT).text('地址不能输入换行符').addClass(SHOW);
                    $(this).removeClass(SUCCESS).addClass(ERROR);
                } else {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                }
            })

            // 备案校验
            put_on_record.bind('input propertychange blur', function () {
                if ($(this).val() === '') {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                } else if (!_pattern.test($(this).val())) {
                    $(this).siblings(PROMPT).text('备案不能输入换行符').addClass(SHOW);
                    $(this).removeClass(SUCCESS).addClass(ERROR);
                } else {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                }
            })

            // 版权校验
            copyright.bind('input propertychange blur', function () {
                if ($(this).val() === '') {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                } else if (!_pattern.test($(this).val())) {
                    $(this).siblings(PROMPT).text('版权不能输入换行符').addClass(SHOW);
                    $(this).removeClass(SUCCESS).addClass(ERROR);
                } else {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                }
            })

            // 邮编校验
            zip_code.bind('input propertychange blur', function () {
                if ($(this).val() === '') {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                } else if (!zip_codePattern.test($(this).val())) {
                    $(this).siblings(PROMPT).text('请输入 6 位数邮编').addClass(SHOW);
                    $(this).removeClass(SUCCESS).addClass(ERROR);
                } else {
                    $(this).siblings(PROMPT).removeClass(SHOW);
                    $(this).removeClass(ERROR).addClass(SUCCESS);
                }
            })
            break;
        // 重置校验
        case 'reset':
            // 重置上传
            icon.removeClass(SUCCESS + ' ' + ERROR);
            icon.siblings(PROMPT).removeClass(SHOW);
            // 重置LOGO
            logo.removeClass(SUCCESS + ' ' + ERROR);
            logo.siblings(PROMPT).removeClass(SHOW);
            // 重置标题
            title.removeClass(SUCCESS + ' ' + ERROR);
            title.siblings(PROMPT).removeClass(SHOW);
            // 重置描述
            keywords.removeClass(SUCCESS + ' ' + ERROR);
            keywords.siblings(PROMPT).removeClass(SHOW);
            // 重置描述
            description.removeClass(SUCCESS + ' ' + ERROR);
            description.siblings(PROMPT).removeClass(SHOW);
            // 重置名称
            name.removeClass(SUCCESS + ' ' + ERROR);
            name.siblings(PROMPT).removeClass(SHOW);
            // 重置地址
            addr.removeClass(SUCCESS + ' ' + ERROR);
            addr.siblings(PROMPT).removeClass(SHOW);
            // 重置备案
            put_on_record.removeClass(SUCCESS + ' ' + ERROR);
            put_on_record.siblings(PROMPT).removeClass(SHOW);
            // 重置版权
            copyright.removeClass(SUCCESS + ' ' + ERROR);
            copyright.siblings(PROMPT).removeClass(SHOW);
            // 重置电话
            telephone.removeClass(SUCCESS + ' ' + ERROR);
            telephone.siblings(PROMPT).removeClass(SHOW);
            // 重置传真
            fax.removeClass(SUCCESS + ' ' + ERROR);
            fax.siblings(PROMPT).removeClass(SHOW);
            // 重置邮编
            zip_code.removeClass(SUCCESS + ' ' + ERROR);
            zip_code.siblings(PROMPT).removeClass(SHOW);
            break;
    }
}

/**
 * 校验
 * @return void
 */
function rules() {
    // 校验结果
    var result = true;
    // 小图标
    var icon = $('#icon');
    // LOGO
    var logo = $('#logo');
    // 标题
    var title = $('#title');
    // 关键词
    var keywords = $('#keywords');
    // 描述
    var description = $('#description');
    // 名称
    var name = $('#name');
    // 地址
    var addr = $('#addr');
    // 备案
    var put_on_record = $('#put_on_record');
    // 版权
    var copyright = $('#copyright');
    // 电话
    var telephone = $('#telephone');
    // 传真
    var fax = $('#fax');
    var telephonePattern =  /^[0-9-()（）]{7,18}$/;
    // 邮编
    var zip_code = $('#zip_code');
    var zip_codePattern = /^[0-9]{6}$/;
    // 通用正则
    var _pattern = /^.+$/;

    // 小图标校验
    icon.addClass(SUCCESS);

    // LOGO校验
    logo.addClass(SUCCESS);

    // 标题校验
    if (title.val() === '') {
        title.addClass(SUCCESS);
    } else if (!_pattern.test(title.val())) {
        title.siblings(PROMPT).text('标题不能输入换行符').addClass(SHOW);
        title.addClass(ERROR);
        result = false;
    } else {
        title.addClass(SUCCESS);
    }

    // 关键词校验
    if (keywords.val() === '') {
        keywords.addClass(SUCCESS);
    } else if (!_pattern.test(keywords.val())) {
        keywords.siblings(PROMPT).text('关键词不能输入换行符').addClass(SHOW);
        keywords.addClass(ERROR);
        result = false;
    } else {
        keywords.addClass(SUCCESS);
    }

    // 描述校验
    if (description.val() === '') {
        description.addClass(SUCCESS);
    } else if (!_pattern.test(description.val())) {
        description.siblings(PROMPT).text('描述不能输入换行符').addClass(SHOW);
        description.addClass(ERROR);
        result = false;
    } else {
        description.addClass(SUCCESS);
    }

    // 名称校验
    if (name.val() === '') {
        name.addClass(SUCCESS);
    } else if (!_pattern.test(name.val())) {
        name.siblings(PROMPT).text('名称不能输入换行符').addClass(SHOW);
        name.addClass(ERROR);
        result = false;
    } else {
        name.addClass(SUCCESS);
    }

    // 地址校验
    if (addr.val() === '') {
        addr.addClass(SUCCESS);
    } else if (!_pattern.test(addr.val())) {
        addr.siblings(PROMPT).text('地址不能输入换行符').addClass(SHOW);
        addr.addClass(ERROR);
        result = false;
    } else {
        addr.addClass(SUCCESS);
    }

    // 备案校验
    if (put_on_record.val() === '') {
        put_on_record.addClass(SUCCESS);
    } else if (!_pattern.test(put_on_record.val())) {
        put_on_record.siblings(PROMPT).text('备案不能输入换行符').addClass(SHOW);
        put_on_record.addClass(ERROR);
        result = false;
    } else {
        put_on_record.addClass(SUCCESS);
    }

    // 版权校验
    if (copyright.val() === '') {
        copyright.addClass(SUCCESS);
    } else if (!_pattern.test(copyright.val())) {
        copyright.siblings(PROMPT).text('版权不能输入换行符').addClass(SHOW);
        copyright.addClass(ERROR);
        result = false;
    } else {
        copyright.addClass(SUCCESS);
    }

    // 电话校验
    if (telephone.val() === '') {
        telephone.addClass(SUCCESS);
    } else if (!telephonePattern.test(telephone.val())) {
        telephone.siblings(PROMPT).text('请输入正确的电话号码格式').addClass(SHOW);
        telephone.addClass(ERROR);
        result = false;
    } else {
        telephone.addClass(SUCCESS);
    }

    // 传真校验
    if (fax.val() === '') {
        fax.addClass(SUCCESS);
    } else if (!telephonePattern.test(fax.val())) {
        fax.siblings(PROMPT).text('请输入正确的传真号码格式').addClass(SHOW);
        fax.addClass(ERROR);
        result = false;
    } else {
        fax.addClass(SUCCESS);
    }

    // 邮编校验
    if (zip_code.val() === '') {
        zip_code.addClass(SUCCESS);
    } else if (!zip_codePattern.test(zip_code.val())) {
        zip_code.siblings(PROMPT).text('请输入 6 位数邮编').addClass(SHOW);
        zip_code.addClass(ERROR);
        result = false;
    } else {
        zip_code.addClass(SUCCESS);
    }

    // 错误元素
    var error = $('.web-form .' + ERROR).eq(0);
    // 获取焦点
    error.focus();

    // 返回校验结果
    return result;
}

/**
 * 提交
 * @param {Object} _this 当前DOM
 * @return void
 */
function onSubmit(_this) {
    // 检验
    if (rules()) {
        // 小图标
        var icon = $('#icon');
        // LOGO
        var logo = $('#logo');
        // 获取小图标的FILE文件
        var iconFiles = icon.eq(0).prop('files');
        // 获取LOGO的FILE文件
        var logoFiles = logo.eq(0).prop('files');
        // 判断FILE文件数量
        if (iconFiles.length || logoFiles.length) {
            // 添加加载
            actionLoading(_this, 'add', 'submit');
            // 实例化表单数据
            var files = new FormData();
            // 判断是否有小图标
            if (iconFiles[0]) files.append('icon', iconFiles[0]);
            // 判断是否有LOGO
            if (logoFiles[0]) files.append('logo', logoFiles[0]);
            // 上传
            upload(_this, files, function (res) {
                request(_this, res.data.data);
            });
        } else {
            // 添加加载
            actionLoading(_this, 'add', 'submit');
            // 请求
            request(_this);
        }
    }
}

/**
 * 上传
 * @param {Object} _this 当前DOM
 * @param {Object} files files对象
 * @param {Function} callback 回调函数
 * @return void
 */
function upload(_this, files, callback) {
    // 上传文件
    axios.post(UPLOADURL, files).then(function (res) {
        // 执行回调函数
        callback(res);
    }).catch(function (err) {
        // 消息提示
        message('add', 'error', err);
        // 删除加载
        actionLoading(_this, 'remove', 'submit');
    })
}

/**
 * 请求
 * @param {Object} _this 当前DOM
 * @param {Object} imgObj 图片对象
 * @return void
 */
function request(_this, imgObj) {
    // 获取数据
    var data = {
        title: $('#title').val(),
        keywords: $('#keywords').val(),
        description: $('#description').val(),
        name: $('#name').val(),
        telephone: $('#telephone').val(),
        fax: $('#fax').val(),
        addr: $('#addr').val(),
        zip_code: $('#zip_code').val(),
        put_on_record: $('#put_on_record').val(),
        copyright: $('#copyright').val(),
        brief_introduction: BRIEFINTRODUCTION.getContent(),
        development: DEVELOPMENT.getContent(),
        service: SERVICE.getContent(),
        winning: WINNING.getContent(),
        work: WORK.getContent(),
        contact: CONTACT.getContent()
    };
    // 判断是否有图片
    if (imgObj) data = $.extend(data, imgObj);

    // 发送请求
    axios({
        method: 'put',
        url: URL,
        data: data
    }).then(function (res) {
        // 消息提示
        message('add', res.data.type, res.data.message);
        // 删除加载
        actionLoading(_this, 'remove', 'submit');
        // 判断是否操作成功
        if (res.data.state === 200) {
            // 重置变化校验
            changeRules('reset');
            // 延迟定时器
            setTimeout(function () {
                // 刷新页面
                window.location.reload();
            }, 400);
        }
    }).catch(function (err) {
        // 消息提示
        message('add', 'error', err);
        // 删除加载
        actionLoading(_this, 'remove', 'submit');
    })
}